home *** CD-ROM | disk | FTP | other *** search
/ Varios Español / Varios Español.iso / DBASE5 / CUA_SAMP.ZIP / ASCIIC.PRG < prev    next >
Text File  |  1994-10-12  |  18KB  |  552 lines

  1.  
  2. *......................................................................
  3. *
  4. *   Program Name: ASCII.PRG           Copyright: Borland International
  5. *   Date Created: 01/21/94             Language: dBASE 5.0
  6. *   Time Created: 10:38:14               Author: Borland dBASE R&D
  7. *   /brief/library.src
  8. *......................................................................
  9.  
  10. #define kMinWidth   25
  11. #define kMaxWidth   72
  12. #define kMinHeight  18
  13.  
  14. #define kListWidth  15
  15.  
  16. #define kNULL        0
  17. #define kSpace      32
  18. #define kMaxStrLen  80
  19.  
  20. #define kTop 1
  21.  
  22. #define ALLTRIM(kStr) LTRIM(RTRIM(kStr))
  23.  
  24. *.................................................................
  25. * Procedure Name:  ASCII
  26. * Parameters:      None
  27. * Ext Memvars:     None
  28. * Description:     Displays an ASCII table in a dBASE 5.0 form
  29. *                  Codes are shown in decimal, hex, and character
  30. *.................................................................
  31. PROCEDURE ASCIIC
  32.     PRIVATE lVoid
  33.  
  34.     #include "TALKOFF.HDB"
  35.  
  36.     IF TYPE("_CmdWindow.dbASCII.top") = "N"  && if another instance of dbASCII is active
  37.         lVoid = _CmdWindow.dbASCII.lTable.Setfocus()
  38.         lVoid = _CmdWindow.dbASCII.Open()
  39.     ELSE
  40.         DO DEFASCII
  41.     ENDIF
  42. RETURN
  43.  
  44.  
  45. *...............................................
  46. * Procedure Name:   DEFASCII
  47. * Parameters:       None
  48. * Ext Memvars:      None
  49. * Description:      Define the ASCII Chart form
  50. *...............................................
  51. PROCEDURE DEFASCII
  52.     PRIVATE lVoid
  53.  
  54.     DECLARE aCodes[256]     && array of 256 rows to hold codes
  55.  
  56.     *.............................
  57.     * define the ascii table form
  58.     *.............................
  59.     #include "ASCIIC.DFM"
  60.  
  61.     _CmdWindow.dbASCII = m->dbASCII
  62.  
  63.     DO InitCodes
  64.  
  65.     _CmdWindow.dbASCII.lTable.DataSource = "ARRAY aCodes"
  66.     _CmdWindow.dbASCII.ASCMenu.mEdit.mMin.Enabled = .F.
  67.     lVoid = _CmdWindow.dbASCII.lTable.Setfocus()
  68.     lVoid = _CmdWindow.dbASCII.Open()
  69.  
  70. RETURN
  71.  
  72.  
  73. *..............................................................
  74. * Procedure Name:   Cpy2Entr
  75. * Parameters:       None
  76. * Ext Memvars:      _CmdWindow.dbASCII.e1
  77. * Description:      Copies character from chart to entry field
  78. *..............................................................
  79. PROCEDURE Cpy2Entr
  80.     PRIVATE cValue, nSel, nTLen
  81.  
  82.     SET TALK OFF
  83.  
  84.     cValue = SPACE(kMaxStrLen + 1)
  85.     nSel   = 0
  86.     nTLen  = 0
  87.  
  88.     nSel = _CmdWindow.dbASCII.lTable.CurSel
  89.     nSel = nSel - 1
  90.  
  91.     IF _CmdWindow.dbASCII.e1.nLen < kMaxStrLen
  92.         DO CASE
  93.             CASE nSel = kNULL
  94.                 RETURN
  95.             CASE nSel = kSpace
  96.                 _CmdWindow.dbASCII.e1.nLen = _CmdWindow.dbASCII.e1.nLen + 1
  97.             OTHERWISE
  98.                 cValue = RTRIM(_CmdWindow.dbASCII.e1.Value) + ""
  99.                 nTLen = LEN(m->cValue)
  100.                 DO WHILE m->nTLen < _CmdWindow.dbASCII.e1.nLen
  101.                     cValue = m->cValue + " "
  102.                     nTLen = LEN(m->cValue)
  103.                 ENDDO
  104.                 cValue = m->cValue + CHR(m->nSel)
  105.                 _CmdWindow.dbASCII.e1.nLen = _CmdWindow.dbASCII.e1.nLen + 1
  106.                 cValue = m->cValue + SPACE(kMaxStrLen - LEN(m->cValue))
  107.                 _CmdWindow.dbASCII.e1.Value = m->cValue
  108.         ENDCASE
  109.     ENDIF
  110. RETURN
  111.  
  112.  
  113. *........................................................
  114. * Procedure Name:   CopyChar
  115. * Parameters:       None
  116. * Ext Memvars:      None
  117. * Description:      Copies character string to clipboard
  118. *........................................................
  119. PROCEDURE CopyChar
  120.     PRIVATE cValue
  121.  
  122.     cValue = _CmdWindow.dbASCII.e1.Value
  123.  
  124.     cValue = ALLTRIM(m->cValue) + ""
  125.  
  126.     _Clipboard.InsertLine = m->cValue
  127.     _Clipboard.ExtendSelection = .T.
  128.     _Clipboard.Column = 1
  129.     _Clipboard.ExtendSelection = .F.
  130. RETURN
  131.  
  132.  
  133. *.............................................................................
  134. * Procedure Name:   ResetLen
  135. * Parameters:       None
  136. * Ext Memvars:      _CmdWindow.dbASCII.e1
  137. * Description:      Resets the value of _CmdWindow.dbASCII.e1.nLen to the current length
  138. *                   of the string in _CmdWindow.dbASCII.e1.Value following a manual
  139. *                   edit by the user.
  140. *.............................................................................
  141. PROCEDURE ResetLen
  142.     PRIVATE cValue, nTLen
  143.  
  144.     cValue = ""
  145.     nTLen  = 0
  146.  
  147.     cValue = RTRIM(_CmdWindow.dbASCII.e1.Value) + ""
  148.     nTLen  = LEN(m->cValue)
  149.  
  150.     _CmdWindow.dbASCII.e1.nLen  = m->nTLen
  151.     _CmdWindow.dbASCII.e1.Value = m->cValue + SPACE(kMaxStrLen - m->nTLen)
  152. RETURN
  153.  
  154.  
  155. *...................................................................
  156. * Procedure Name:   FixLen
  157. * Parameters:       None
  158. * Ext Memvars:      _CmdWindow.dbASCII.e1
  159. * Description:      Fixes the value of _CmdWindow.dbASCII.e1 to the current length
  160. *                   of the string in _CmdWindow.dbASCII.e1.Value.nLen on a manual
  161. *                   edit by the user.
  162. *.............................................................................
  163. PROCEDURE FixLen
  164.     PRIVATE cValue, nTLen
  165.  
  166.     cValue = ""
  167.     nTLen  = 0
  168.  
  169.     cValue = RTRIM(_CmdWindow.dbASCII.e1.Value) + ""
  170.     nTLen = LEN(m->cValue)
  171.     DO WHILE nTLen < _CmdWindow.dbASCII.e1.nLen
  172.         cValue = m->cValue + " "
  173.         nTLen = LEN(m->cValue)
  174.     ENDDO
  175.     _CmdWindow.dbASCII.e1.Value = m->cValue + SPACE(kMaxStrLen - LEN(m->cValue))
  176. RETURN
  177.  
  178.  
  179. *.................................................................
  180. * Procedure Name:   SetTalk
  181. * Parameters:       None
  182. * Ext Memvars:      This.lSTalk
  183. * Description:      Saves the value of SET TALK and sets TALK OFF
  184. *.................................................................
  185. PROCEDURE SetTalk
  186.     IF TYPE("_CmdWindow.dbASCII.lSTalk") = "L"
  187.         _CmdWindow.dbASCII.lSTalk = SET("TALK") = "ON"
  188.     ELSE
  189.         dbASCII.lSTalk = SET("TALK") = "ON"
  190.     ENDIF
  191.     SET TALK OFF
  192. RETURN
  193.  
  194.  
  195. *............................................................................
  196. * Procedure Name:   ResetTalk
  197. * Parameters:       None
  198. * Ext Memvars:      This.lSTalk
  199. * Description:      Resets the value of SET TALK based on the value when the
  200. *                   object got focus
  201. *............................................................................
  202. PROCEDURE ResetTalk
  203.     IF _CmdWindow.dbASCII.lSTalk
  204.         SET TALK ON
  205.     ELSE
  206.         SET TALK OFF
  207.     ENDIF
  208. RETURN
  209.  
  210.  
  211. *....................................................
  212. * Procedure Name:   InitCodes
  213. * Parameters:       None
  214. * Ext Memvars:      aCodes[]
  215. * Description:      Initializes character code array
  216. *....................................................
  217. PROCEDURE InitCodes
  218.     PRIVATE i, j, cIntlNull, cIntlSpace
  219.  
  220.     SET TALK OFF
  221.  
  222.     cIntlNull  = [NUL    0   00]
  223.     cIntlSpace = [SPC   32   20]
  224.  
  225.     j = 0
  226.  
  227.     *........................
  228.     * initialize codes array
  229.     *........................
  230.     FOR m->i = 0 TO 255
  231.         j = m->i + 1
  232.         DO CASE                         && Character
  233.             CASE m->i = 0
  234.                 aCodes[m->j] = m->cIntlNull
  235.             CASE i = 32
  236.                 aCodes[m->j] = m->cIntlSpace
  237.             OTHERWISE
  238.                 aCodes[m->j] = " " + CHR(m->i) + "    " + STR(m->i,3,0) + "   " +;
  239.                     IIF(m->i > 15, Dec2Hex(m->i), "0" + Dec2Hex(m->i))
  240.         ENDCASE
  241.     ENDFOR
  242. RETURN
  243.  
  244.  
  245. *...................................
  246. * Procedure Name:   FileExit
  247. * Parameters:       None
  248. * Ext Memvars:      _CmdWindow.dbASCII
  249. * Description:      Release _CmdWindow.dbASCII
  250. *...................................
  251. PROCEDURE FileExit
  252.     PRIVATE lVoid
  253.  
  254.     lVoid = _CmdWindow.dbASCII.Close()
  255.     lVoid = _CmdWindow.dbASCII.Release()
  256.     _CmdWindow.dbASCII = .F.
  257.     RELEASE dbASCII
  258. RETURN
  259.  
  260.  
  261. *...............................................................
  262. * Procedure Name:   FixSize
  263. * Parameters:       None
  264. * Ext. Memvars:     _CmdWindow.dbASCII
  265. * Description:      Adjusts all objects in _CmdWindow.dbASCII when resized
  266. *...............................................................
  267. PROCEDURE FixSize
  268.     PRIVATE nHeight, nWidth, nTWidth, nLeft
  269.  
  270.     SET TALK OFF
  271.  
  272.     IF _CmdWindow.dbASCII.WindowState # 1
  273.  
  274.         nWidth  = 0     && form height
  275.         nTWidth = 0     && list box width
  276.         nLeft   = 0     && list box left
  277.  
  278.         * make sure the form was not made too small
  279.         IF _CmdWindow.dbASCII.Height < kMinHeight
  280.             _CmdWindow.dbASCII.Height = kMinHeight
  281.         ENDIF
  282.  
  283.         IF _CmdWindow.dbASCII.Width < kMinWidth
  284.             _CmdWindow.dbASCII.Width = kMinWidth
  285.         ENDIF
  286.  
  287.         * make sure the form was not made too wide
  288.         IF _CmdWindow.dbASCII.Width > kMaxWidth
  289.             _CmdWindow.dbASCII.Width = kMaxWidth
  290.         ENDIF
  291.  
  292.         * save the new height and width
  293.         nHeight = _CmdWindow.dbASCII.Height
  294.         nWidth  = _CmdWindow.dbASCII.Width
  295.  
  296.         * adjust the button
  297.         _CmdWindow.dbASCII.bAdd.Top  = m->nHeight - (8 - kTop)
  298.         _CmdWindow.dbASCII.bAdd.Left = INT((m->nWidth - _CmdWindow.dbASCII.bAdd.width) / 2)    - 1
  299.  
  300.         * adjust the entry field
  301.         _CmdWindow.dbASCII.e1.Top   = m->nHeight - (6 - kTop)
  302.         _CmdWindow.dbASCII.e1.Width = m->nWidth - 10
  303.  
  304.         * adjust the list box
  305.         _CmdWindow.dbASCII.lTable.Height = m->nHeight - 10
  306.  
  307.         DO CASE
  308.             CASE m->nWidth < ((kMinWidth * 2) - 6)
  309.                 nTWidth                             =  kListWidth
  310.                 _CmdWindow.dbASCII.lTable.Width     =  m->nTWidth
  311.                 _CmdWindow.dbASCII.lTable.Column    =  1
  312.                 _CmdWindow.dbASCII.dbTitle2.Visible = .F.
  313.                 _CmdWindow.dbASCII.dbTitle3.Visible = .F.
  314.                 _CmdWindow.dbASCII.dbTitle4.Visible = .F.
  315.             CASE (m->nWidth >= ((kMinWidth * 2) -  6)) .AND.;
  316.                  (m->nWidth <  ((kMinWidth * 3) - 11))
  317.                 nTWidth                             = (kListWidth * 2) + 2
  318.                 _CmdWindow.dbASCII.lTable.Width     =  m->nTWidth
  319.                 _CmdWindow.dbASCII.lTable.Column    =  2
  320.                 _CmdWindow.dbASCII.dbTitle2.Visible = .T.
  321.                 _CmdWindow.dbASCII.dbTitle3.Visible = .F.
  322.             CASE (m->nWidth >= ((kMinWidth * 3) - 11)) .AND. (m->nWidth < kMaxWidth)
  323.                 nTWidth                             = (kListWidth * 3) + 4
  324.                 _CmdWindow.dbASCII.lTable.Width     =  m->nTWidth
  325.                 _CmdWindow.dbASCII.lTable.Column    =  3
  326.                 _CmdWindow.dbASCII.dbTitle3.Visible = .T.
  327.                 _CmdWindow.dbASCII.dbTitle4.Visible = .F.
  328.             CASE nWidth = kMaxWidth
  329.                 nTWidth                             = (kListWidth * 4) + 6
  330.                 _CmdWindow.dbASCII.lTable.Width     =  m->nTWidth
  331.                 _CmdWindow.dbASCII.lTable.Column    =  4
  332.                 _CmdWindow.dbASCII.dbTitle2.Visible = .T.
  333.                 _CmdWindow.dbASCII.dbTitle3.Visible = .T.
  334.                 _CmdWindow.dbASCII.dbTitle4.Visible = .T.
  335.         ENDCASE
  336.  
  337.         * get the left coordinate for the text
  338.         nLeft = INT((m->nWidth / 2) - (m->nTWidth / 2) - 1)
  339.         _CmdWindow.dbASCII.lTable.Left = m->nLeft
  340.  
  341.         * adjust the title text
  342.         _CmdWindow.dbASCII.dbTitle1.Left = m->nLeft
  343.  
  344.         IF _CmdWindow.dbASCII.dbTitle2.Visible
  345.             _CmdWindow.dbASCII.dbTitle2.Left = m->nLeft + 17
  346.         ELSE
  347.             _CmdWindow.dbASCII.dbTitle2.Left = 0
  348.         ENDIF
  349.  
  350.         IF _CmdWindow.dbASCII.dbTitle3.Visible
  351.             _CmdWindow.dbASCII.dbTitle3.Left = m->nLeft + 34
  352.         ELSE
  353.             _CmdWindow.dbASCII.dbTitle3.Left = 0
  354.         ENDIF
  355.  
  356.         IF _CmdWindow.dbASCII.dbTitle4.Visible
  357.             _CmdWindow.dbASCII.dbTitle4.Left = m->nLeft + 51
  358.         ELSE
  359.             _CmdWindow.dbASCII.dbTitle4.Left = 0
  360.         ENDIF
  361.  
  362.         IF (_CmdWindow.dbASCII.Width = kMinWidth) .AND. (_CmdWindow.dbASCII.Height = kMinHeight)
  363.             _CmdWindow.dbASCII.ASCMenu.mEdit.mMin.Enabled = .F.
  364.         ELSE
  365.             _CmdWindow.dbASCII.ASCMenu.mEdit.mMin.Enabled = .T.
  366.         ENDIF
  367.  
  368.         IF (_CmdWindow.dbASCII.Width = kMaxWidth) .AND. (_CmdWindow.dbASCII.Height >= GetMaxHgt())
  369.             _CmdWindow.dbASCII.ASCMenu.mEdit.mMax.Enabled = .F.
  370.         ELSE
  371.             _CmdWindow.dbASCII.ASCMenu.mEdit.mMax.Enabled = .T.
  372.         ENDIF
  373.     ENDIF
  374. RETURN
  375.  
  376.  
  377. *...............................................................
  378. * Procedure Name:   ASCMax
  379. * Parameters:       None
  380. * Ext Memvars:      _CmdWindow.dbASCII
  381. * Description:      Sets ASCII chart to maximum size for screen
  382. *...............................................................
  383. PROCEDURE ASCMax
  384.     _CmdWindow.dbASCII.Height = GetMaxHgt()
  385.     _CmdWindow.dbASCII.Top    = 0
  386.  
  387.     _CmdWindow.dbASCII.Width  = kMaxWidth
  388.  
  389.     IF _CmdWindow.dbASCII.Left > 6
  390.         _CmdWindow.dbASCII.Left = 6
  391.     ENDIF
  392.  
  393.     IF _CmdWindow.dbASCII.Left < 0
  394.         _CmdWindow.dbASCII.Left = 0
  395.     ENDIF
  396.  
  397.     DO FixSize
  398.  
  399.     _CmdWindow.dbASCII.dbTitle2.Visible = .T.
  400.     _CmdWindow.dbASCII.dbTitle3.Visible = .T.
  401. RETURN
  402.  
  403.  
  404. *....................................................
  405. * Procedure Name:   ASCMin
  406. * Parameters:       None
  407. * Ext Memvars:      _CmdWindow.dbASCII
  408. * Description:      Sets ASCII chart to minimum size
  409. *....................................................
  410. PROCEDURE ASCMin
  411.     PRIVATE nMaxHgt
  412.  
  413.     nMaxHgt = GetMaxHgt()
  414.  
  415.     _CmdWindow.dbASCII.Width  = kMinWidth
  416.     _CmdWindow.dbASCII.Height = kMinHeight
  417.  
  418.     IF _CmdWindow.dbASCII.Left > 56
  419.         _CmdWindow.dbASCII.Left = 56
  420.     ENDIF
  421.  
  422.     IF _CmdWindow.dbASCII.Left < 0
  423.         _CmdWindow.dbASCII.Left = 0
  424.     ENDIF
  425.  
  426.     IF _CmdWindow.dbASCII.Top > (m->nMaxHgt - kMinHeight)
  427.         _CmdWindow.dbASCII.Top = m->nMaxHgt - kMinHeight
  428.     ENDIF
  429.  
  430.     DO FixSize
  431.  
  432.     _CmdWindow.dbASCII.dbTitle3.Visible = .F.
  433.     _CmdWindow.dbASCII.dbTitle4.Visible = .F.
  434. RETURN
  435.  
  436.  
  437. *............................................................................
  438. * Function Name:    GetMaxHgt()
  439. * Parameters:       None
  440. * Ext Memvars:      None
  441. * Return Value:     numeric, maximum form height for screen
  442. * Description:      compute the maximum form height for a form with a top
  443. *                   of 0.  The current number of lines on the screen and the
  444. *                   setting of SET STATUS are taken into account.
  445. *............................................................................
  446. FUNCTION GetMaxHgt
  447.     PRIVATE nLines
  448.  
  449.     * get the number of lines by looking at the display mode
  450.     nLines = VAL(RIGHT(RTRIM(SET("DISPLAY")), 2))
  451.  
  452.     IF m->nLines = 0       && if no number in display mode
  453.         nLines = 25
  454.     ENDIF
  455.  
  456.     IF SET("STATUS") = "ON"
  457.         nLines = m->nLines - 5     && put form 2 lines above status
  458.     ELSE                        && no status line
  459.         nLines = m->nLines - 3     && put form 2 lines above bottom
  460.     ENDIF
  461. RETURN m->nLines
  462.  
  463. *...............................................................
  464. * Procedure Name:   AHAbout
  465. * Parameters:       None
  466. * Ext Memvars:      None
  467. * Description:      Displays an "About" box for the ASCII chart
  468. *...............................................................
  469. PROCEDURE AHAbout
  470.     PRIVATE lVoid
  471.  
  472.     lVoid = .T.
  473.  
  474.     #include "AHABOUT.DFM"
  475.  
  476.     lVoid = AHAbout.ReadModal()
  477.  
  478.     lVoid = AHAbout.Release()
  479.     RELEASE AHAbout
  480. RETURN
  481.  
  482.  
  483. PROCEDURE HUsing
  484. RETURN
  485.  
  486.  
  487. *..........................................
  488. * Procedure Name:   PrAbout
  489. * Parameters:       None
  490. * Ext Memvars:      HAbout
  491. * Description:      Closes the form HAbout
  492. *..........................................
  493. PROCEDURE PrAbout
  494.     PRIVATE lVoid
  495.  
  496.     lVoid = AHAbout.Close()
  497. RETURN
  498.  
  499.  
  500. *......................................................................
  501. * Procedure Name:   IDEHelp
  502. * Parameters:       None
  503. * Ext Memvars:      None
  504. * Description:      Calls the help system with current object's HelpID
  505. *......................................................................
  506. PROCEDURE IDEHelp
  507.     PRIVATE lVoid
  508.  
  509.     _SysHelp.HelpID = This.HelpID
  510.     lVoid = _SysHelp.ReadModal()
  511. RETURN
  512.  
  513.  
  514. *.....................................................................
  515. * The following functions are from the dUFLP library maintained by
  516. * Ken Mayer of Team Borland.  These functions are in the public
  517. * domain.  The library may be downloaded from the Borland dBASE Forum
  518. * on CompuServe.
  519. *.....................................................................
  520.  
  521.  
  522. FUNCTION Dec2Hex
  523. *-----------------------------------------------------------------------
  524. *-- Programmer..: Jay Parsons (CIS: 72662,1302)
  525. *-- Date........: 03/01/1992
  526. *-- Notes.......: Converts an unsigned integer ( in decimal notation)
  527. *--               to a hexadecimal string
  528. *-- Written for.: dBASE IV, 1.1
  529. *-- Rev. History: 03/01/1992
  530. *-- Calls.......: None
  531. *-- Called by...: Any
  532. *-- Usage.......: Dec2Hex(<nDecimal>)
  533. *-- Example.....: ? Dec2Hex( 118 )
  534. *-- Returns.....: Character = Hexadecimal equivalent ( "F6" in example )
  535. *-- Parameters..: nDecimal = number to convert
  536. *-----------------------------------------------------------------------
  537.  
  538.    parameters nDecimal
  539.    private nD, cH
  540.  
  541.    m->nD = int( m->nDecimal )
  542.    m->cH= ""
  543.    do while m->nD > 0
  544.      m->cH = substr( "0123456789ABCDEF", mod( m->nD, 16 ) + 1 , 1 );
  545.                           + m->cH
  546.      m->nD = int( m->nD / 16 )
  547.    enddo
  548.  
  549. RETURN iif( "" = m->cH, "0", m->cH )
  550. *-- Eof: Dec2Hex()
  551.  
  552.